package ar.com.mooral.activities;

import java.util.Calendar;
import java.util.Hashtable;
import java.util.Vector;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import ar.com.mooral.crohn.Synchronizer;
import ar.com.mooral.crohn.application.CrohnContext;
import ar.com.mooral.data.Patients;
import ar.com.mooral.data.Result;


public class DatosPersonales extends CrohnActivity {
	private String arraySpinnerSexo[];

	//private EditText txtId;	
	private EditText txtEmail;	
	private EditText txtUsuario;	
	private EditText txtPassword;	
	private EditText txtNombres;	
	private EditText txtPrimerApellido;	
	private EditText txtSegundoApellido;	
	private EditText txtSexo;	
	private EditText txtFechaNacimiento;	
	private EditText txtEstatura;	
	private EditText txtPeso;	
	private EditText txtDeposiciones;	
//	private EditText txtCodigoMedico;	
	private String[] sexos = null;
	protected static String DATOS_PERSONALES_SEXO_HOMBRE 	= "Hombre";
	protected static String DATOS_PERSONALES_SEXO_MUJER 	= "Mujer";
	private String sexo = DATOS_PERSONALES_SEXO_HOMBRE;
	
	private Hashtable<String, String> p;
	private Patients patient;
	
	private String action;
	
	static final int DATE_DIALOG_ID = 0;

	private Synchronizer sync;

	
	
    public void onStart() {
        super.onStart();
    }
    
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.datos_personales);
        
        sync = new Synchronizer(this);
        //alert = new AlertDialog.Builder(this);
        
        
        

//        txtId 				= (EditText) findViewById(R.id.txtDatosPersonalId);
    	txtEmail 			= (EditText) findViewById(R.id.txtDatosPersonalesEmail);
    	//txtUsuario 			= (EditText) findViewById(R.id.txtDatosPersonalUsuario);
    	//txtPassword 		= (EditText) findViewById(R.id.txtDatosPersonalPassword);
    	txtNombres 			= (EditText) findViewById(R.id.txtDatosPersonalesNombres);
    	txtPrimerApellido 	= (EditText) findViewById(R.id.txtDatosPersonalesPrimerApellido);
    	txtSegundoApellido 	= (EditText) findViewById(R.id.txtDatosPersonalesSegundoApellido);
    	//txtSexo 			= (EditText) findViewById(R.id.txtDatosPersonalesSexo);
    	txtFechaNacimiento 	= (EditText) findViewById(R.id.txtDatosPersonalesFechaNacimiento);
    	txtEstatura	 		= (EditText) findViewById(R.id.txtDatosPersonalesEstatura);
    	txtPeso 			= (EditText) findViewById(R.id.txtDatosPersonalesPeso);
    	txtDeposiciones 	= (EditText) findViewById(R.id.txtDatosPersonalesDeposiciones);
 //   	txtCodigoMedico 	= (EditText) findViewById(R.id.txtDatosPersonalCodigoMedico);

    	
        // Only one patient can be in the DB
        patient = new Patients(this);
        Vector v = patient.findAll();
        if (v.size() > 0) {
        	
        	action = "EDIT";
        	
        	this.p = patient.findAll().get(0);
	    	txtEmail.setText(this.p.get("email"));
	    	txtNombres.setText(this.p.get("nombre"));
	    	txtPrimerApellido.setText(this.p.get("primerApellido"));
	    	txtSegundoApellido.setText(this.p.get("segundoApellido"));
	    	txtFechaNacimiento.setText(this.p.get("fechaNacimiento"));
	    	txtEstatura.setText(this.p.get("estatura"));
	    	txtPeso.setText(this.p.get("peso"));
	    	txtDeposiciones.setText(this.p.get("deposiciones"));
        } else {
        	action = "NEW";
        }
    	
    	
    	Spinner cboDatosPersonalesSexo = (Spinner)findViewById(R.id.cboDatosPersonalesSexo);
    	sexos = new String[]{DATOS_PERSONALES_SEXO_HOMBRE,DATOS_PERSONALES_SEXO_MUJER};
	    ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, sexos);    	
    	adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    	cboDatosPersonalesSexo.setAdapter(adaptador);
    	cboDatosPersonalesSexo.setOnItemSelectedListener(
    	        new AdapterView.OnItemSelectedListener() {
    	        public void onItemSelected(AdapterView<?> parent,
    	            android.view.View v, int position, long id) {
    	                sexo = sexos[position];
    	        }
    	        public void onNothingSelected(AdapterView<?> parent) {
    	            sexo = DATOS_PERSONALES_SEXO_HOMBRE;
    	        }
    	});    	
 /*       
        //SEXO
        arraySpinnerSexo=new String[2];
        arraySpinnerSexo[0]="M";
        arraySpinnerSexo[1]="F";
        Spinner spnDatosPersonalesSexo = (Spinner) findViewById(R.id.spnDatosPersonalesSexo);
        ArrayAdapter adapter = new ArrayAdapter(this, R.id.spnDatosPersonalesSexo, arraySpinnerSexo);
        spnDatosPersonalesSexo.setAdapter(adapter);
   */     
     
        // RETORNO
        TextView lblDatosPersonalesCancelar = (TextView) findViewById(R.id.lblDatosPersonalesCancelar);
        lblDatosPersonalesCancelar.setOnClickListener (new View.OnClickListener() {
		    public void onClick(View view) {
		    	finish();
		    }
		});	        

        // SELECCIONE FECHA 
        EditText txtDatosPersonalesFechaNacimiento = (EditText) findViewById(R.id.txtDatosPersonalesFechaNacimiento);
        txtDatosPersonalesFechaNacimiento.setOnClickListener (new View.OnClickListener() {
		    public void onClick(View view) {
		    	//finish();
		    	showDialog(DATE_DIALOG_ID);
		    }
		});	        

        // MENU PRINCIPAL
        TextView lblDatosPersonalesGuardar = (TextView) findViewById(R.id.lblDatosPersonalesGuardar);
        lblDatosPersonalesGuardar.setOnClickListener (new View.OnClickListener() {
		    public void onClick(View view) {
		    	

		 		Hashtable<String, String> data = new Hashtable<String, String>();
		 		/*
		 		if(txtEmail.getText().toString().equals("")){
		 			showMessage("Ingrese el mail.");
		 			return;
		 		}
		 		
		 		if(txtNombres.getText().toString().equals("")){ 
		 			showMessage("Ingrese el nombre."); 
		 			return;
		 		}
		 		
		 		if(txtPrimerApellido.getText().toString().equals("")){ 
		 			showMessage("Ingrese el primer apellido."); 
		 			return;
		 		}
		 		
		 		if(txtSegundoApellido.getText().toString().equals("")){ 
		 			showMessage("Ingrese el segundo apellido."); 
		 			return;
		 		}
		 		
		 		if(txtFechaNacimiento.getText().toString().equals("")){ 
		 			showMessage("Ingrese la fecha de nacimiento."); 
		 			return;
		 		}
		 		
		 		if(txtEstatura.getText().toString().equals("")){ 
		 			showMessage("Ingrese la estatura."); 
		 			return;
		 		}
		 		
		 		if(txtPeso.getText().toString().equals("")){ 
		 			showMessage("Ingrese el peso."); 
		 			return;
		 		}
		 		
		 		if(txtDeposiciones.getText().toString().equals("")){ 
		 			showMessage("Ingrese las deposiciones."); 
		 			return;
		 		}
		 		*/
		 		
		        data.put("email", txtEmail.getText().toString());
		        data.put("usuario", CrohnContext.getUsername());
		        data.put("password", CrohnContext.getPassword());
		        data.put("nombre", txtNombres.getText().toString());
		        data.put("primerApellido", txtPrimerApellido.getText().toString());
		        data.put("segundoApellido", txtSegundoApellido.getText().toString());
		        data.put("sexo", sexo);
		        data.put("fechaNacimiento",txtFechaNacimiento.getText().toString());
		        data.put("estatura", txtEstatura.getText().toString());
		        data.put("peso", txtPeso.getText().toString());
		        data.put("deposiciones", txtDeposiciones.getText().toString());
		        

		        if (action.equals("NEW")) {
		        	
		        	data.put("codigoMedico", CrohnContext.getMedicalCode());

		        	
			        String resultString = sync.registerPatient(data);
			        int result = -999;
			        String message = "Error en los datos, verifique";
			        
			        try{
			        	result = Integer.parseInt(resultString);
			        	if (result <= 0) { 
			        		message = "El usuario no puede registrarse.";
			        	} else {
				        	data.remove("codigoMedico");
				    		Result r = patient.save(data);
				    		if (r.hasError()) {
					        	showMessage(r);
					        } else {
								Intent intent = new Intent();
								intent.setComponent(new ComponentName(Main.class.getPackage().getName(), Main.class.getName()));
								startActivity(intent);
								
					        }
			        	}
			        }
			        catch(Exception exception){
			        	message = "El usuario no puede registrarse. El motivo es: " + resultString;
			        }
			        
			        
			        if (message.length() > 0) {
			        	Result r = new Result(message);
			        	showMessage(r);
			        }


		        } else {		        

		        	data.put("id", p.get("id"));
		        	data.remove("codigoMedico");
		    		Result r = patient.update(data);
		    		if (r.hasError()) {
			        	showMessage(r);
			        } else {
				        finish();
			        }
		        }
		        
		    }
		});	        
    }


	// Creating dialog
	@Override
	protected Dialog onCreateDialog(int id) {
		Calendar c = Calendar.getInstance();
		int cyear = c.get(Calendar.YEAR);
		int cmonth = c.get(Calendar.MONTH);
		int cday = c.get(Calendar.DAY_OF_MONTH);
		switch (id) {
			case DATE_DIALOG_ID:
			return new DatePickerDialog(this,  mDateSetListener,  cyear, cmonth, cday);
		}
		return null;
	}
	
	private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
		// onDateSet method
		public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

			CrohnContext.setDateDay(dayOfMonth);
			CrohnContext.setDateMonth(monthOfYear);
			CrohnContext.setDateYear(year);
			CrohnContext.setDateLoaded(true);
			
			((EditText) findViewById(R.id.txtDatosPersonalesFechaNacimiento)).setText(CrohnContext.getDate());			
			//String date_selected = String.valueOf(monthOfYear+1)+" /"+String.valueOf(dayOfMonth)+" /"+String.valueOf(year);
			//Toast.makeText(DatosPersonales.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
		}
	};
	
}
